<?php
/*
 * testClassLoader.php created on 13 mai 08 
 * Author: Rodrigue Le Gall
 *
 * RPortal is an open source web based Content Management System
 * Copyright (C) 2002-2008  Rodrigue Le Gall
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

require_once 'PHPUnit/Framework.php'; 
require_once 'rportal/private/ClassLoader.php';
 
 /**
  * test the ClassLoader
  */
class ClassLoaderTest extends PHPUnit_Framework_TestCase {
	
	public function setUp(){
		Injector :: $dbhandle = sqlite_factory(dirname(__FILE__) . '/Fixtures/testInjector.db');
		Injector :: $dbhandle->query("PRAGMA synchronous=OFF");
		Injector::initDB();
	}
	
	public function testCreateObject(){
		Injector :: addClass('MockClass2',dirname(__FILE__).'/Fixtures/MockClass2.php');
		try{
			$object = new MockClass();
		}catch(Exception $e){
			$this->fail('The class MockClass should be founnd');
		}
	}
	
	public function testLoadSingleFile(){
		ClassLoader :: loadFile(dirname(__FILE__).'/Fixtures/MockClass3.php');
		$this->assertEquals('MockClass3',Injector::getClass('MockClass3'));
	}

	public function testClassImplementsInterface(){
		ClassLoader :: loadFile(dirname(__FILE__).'/Fixtures/MockClass5.php');
		$this->assertEquals('MockClass5',Injector::getClass('MockInterface'));
	}
	
	public function testLoadFolder(){
		ClassLoader :: loadFolder(dirname(__FILE__).'/Fixtures');
		$this->assertEquals('MockClass4',Injector::getClass('MockClass4'));
		$this->assertEquals('MockClass2',Injector::getClass('MockClass2'));
		$this->assertEquals('MockClass3',Injector::getClass('MockClass3'));
	}
		
}